# _*_ coding: UTF-8 _*_
# @Time     : 2021/10/29 下午 02:33
# @Author   : Li Jie
# @Site     : http://www.hzdledu.cn/
# @File     : w1s2_元素的查找和定位.py
# @Software : PyCharm

from selenium import webdriver
import time
from selenium.webdriver.common.by import By


# 元素的查找
def foo0():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    # 找单个元素
    element = driver.find_element_by_id('kw')
    # element = driver.find_element(By.ID, 'kw')
    element.send_keys('双11买什么')  # 模拟键盘输入
    time.sleep(2)

    driver.quit()


# 元素的定位:1.id;2.name;3.link text;4.partial link text 5.class name;6.tag name;7.css selector;8.xpath
# 1.通过id属性定位：最推荐的定位方式，id一般是唯一的，最快的定位方式，但是不是所有元素都有id属性
def foo1():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    # 找单个元素
    element = driver.find_element_by_id('kw')  # 通过id定位搜索输入框
    # element = driver.find_element(By.ID, 'kw')
    element.send_keys('双11买什么')  # 模拟键盘输入
    time.sleep(2)

    driver.quit()


# 2.通过name属性定位：比较推荐
def foo2():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    # 找单个元素
    element = driver.find_element_by_name('wd')
    # element = driver.find_element(By.ID, 'kw')
    element.send_keys('双11买什么')  # 模拟键盘输入
    time.sleep(2)

    driver.quit()


# 3.通过link text定位：只针对<a>,通过链接的文本定位
def foo3():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_link_text('新闻').click()  # 模拟鼠标左键单击
    time.sleep(2)

    driver.quit()


# 4. 通过partial link text定位：只针对<a>，通过链接的部分文本定位
def foo4():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_partial_link_text("hao").click()  # 模拟鼠标左键单击
    time.sleep(2)

    driver.quit()


# 5.通过class name定位：通过class属性值定位，一般用于定位多个多个
def foo5():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    elements = driver.find_elements_by_class_name("mnav")  # 获取所有class属性为mnav的元素的列表
    for element in elements:
        print(element.text)  # 获取元素text
    time.sleep(2)

    driver.quit()


# 6.通过tag name定位：通过标签名定位，一般用于定位多个元素
def foo6():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    elements = driver.find_elements_by_tag_name('a')  # 获取所有标签为<a>的元素列表
    for element in elements:
        print(element.text)  # 获取元素text
    time.sleep(2)

    driver.quit()


# 7.通过css selector定位：通过css选择器定位
def foo7():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_css_selector('#s-top-left > a:nth-child(3)').click()

    time.sleep(5)

    driver.quit()


# 8.通过xpath定位：最强大的定位的方式，也是最慢的
def foo8():
    driver = webdriver.Chrome()
    driver.maximize_window()

    driver.get('https://www.baidu.com/')

    driver.find_element_by_xpath('//*[@id="s-top-left"]/a[4]').click()

    time.sleep(5)

    driver.quit()


if __name__ == '__main__':
    # foo0()
    # foo1()
    # foo2()
    # foo3()
    # foo4()
    # foo5()
    # foo6()
    # foo7()
    foo8()